package API;

import org.junit.Test;

import java.util.Optional;

/**
 * Optional类
 * 为了避免代码中出现空指针异常
 */
public class OptionalTest {
    @Test
    public void test1() {
        String name = "Tom";
        name = null;

        // 使用Optional避免空指针的问题
        // 1. 实例化
        // 用来创建一个Optional实例，value可能为空，也可能非空。
        //    public static <T> Optional<T> ofNullable(T value) {
        //        return value == null ? (Optional<T>) EMPTY
        //                             : new Optional<>(value);
        //    }
        Optional<String> optionalString = Optional.ofNullable(name);

        String another = "Jerry";

        // orElse(T other)
        // 如果Optional实例内部的value属性不为null，则返回value。
        // 如果为null，返回other。
        //    public T orElse(T other) {
        //        return value != null ? value : other;
        //    }
        String finalName = optionalString.orElse(another);
        System.out.println(finalName.toString());


        // 取出Optional中的value

        //    public T get() {
        //        if (value == null) {
        //            throw new NoSuchElementException("No value present");
        //        }
        //        return value;
        //    }
        System.out.println(optionalString.get());
    }
}
